package mapper;

import entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author JoeZhou
 */
public interface UserMapper {

    /**
     * 根据姓名模糊以及性别精准查询用户信息
     * 若姓名为null，则按性别精准查询
     * 若性别为null，则按姓名模糊查询
     * 姓名和性别都为null，全查
     * 姓名和性别都不为null，按照姓名模糊查询并且按照性别精准查询
     *
     * @param user 用户实体
     * @return 满足条件的用户
     */
    List<User> selectByIf(User user);

    /**
     * 根据姓名模糊以及性别精准查询用户信息
     * id不为null时
     * 若姓名不为null，按姓名模糊查询
     * 若姓名为null，但性别不为null，则按性别精准查询
     * 若姓名和性别都为null，则按照id精准查询
     *
     * @param user 用户实体
     * @return 满足条件的用户
     */
    List<User> selectByChoose(User user);

    /**
     * 根据姓名模糊以及性别精准查询用户信息
     * 若姓名为null，则按性别精准查询
     * 若性别为null，则按姓名模糊查询
     * 姓名和性别都为null，全查
     * 姓名和性别都不为null，按照姓名模糊查询并且按照性别精准查询
     *
     * @param user 用户实体
     * @return 满足条件的用户
     */
    List<User> selectByTrim(User user);

    /**
     * 找到编号为3和4和6的用户，参数为数组
     *
     * @param ids 编号数组
     * @return 满足条件的用户
     */
    List<User> selectWithArray(int[] ids);

    /**
     * 找到编号为3和4和6的用户，参数为list
     *
     * @param ids 编号列表
     * @return 满足条件的用户
     */
    List<User> selectWithList(List<Integer> ids);

    /**
     * 找到编号为3和4和6的用户，参数为Map
     *
     * @param user 用户信息集合
     * @return 满足条件的用户
     */
    List<User> selectWithMap(Map<String, Object> user);

    /**
     * 根据主键修改用户信息，使用set
     *
     * @param user 用户实体
     */
    void updateBySet(User user);

    /**
     * 根据主键修改用户信息，使用trim
     *
     * @param user 用户实体
     */
    void updateByTrim(User user);

    /**
     * 测试@Param()和_parameter
     *
     * @param name   用户姓名
     * @param gender 用户性别
     * @param user   用户实体
     * @return 满足条件的用户
     */
    List<User> selectByParam(@Param("a") String name, Integer gender, User user);
}